home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / etc / hotplug / hotplug.functions < prev    next >
Text File  |  2006-05-01  |  5KB  |  195 lines

  1. #
  2. # Setup and BASH utility functions for use in hotplug agents
  3. #
  4. # Most essential parameters are passed from the kernel using
  5. # environment variables.  For more information, see the docs
  6. # on-line at http://linux-hotplug.sourceforge.net or the
  7. # sources for each hotplug-aware kernel subsystem.
  8. #
  9. # $Id: hotplug.functions,v 1.27 2004/09/20 23:12:07 kroah Exp $
  10. #
  11. #
  12.  
  13. # DEBUG=yes; export DEBUG
  14. PATH=/bin:/sbin:/usr/sbin:/usr/bin
  15.  
  16. KERNEL=`uname -r`
  17. MODULE_DIR=/lib/modules/$KERNEL
  18.  
  19. HOTPLUG_DIR=/etc/hotplug
  20.  
  21. if [ -f /etc/sysconfig/hotplug ]; then
  22.     . /etc/sysconfig/hotplug
  23. fi
  24.  
  25. if [ -x /usr/bin/logger ]; then
  26.     LOGGER=/usr/bin/logger
  27. elif [ -x /bin/logger ]; then
  28.     LOGGER=/bin/logger
  29. else
  30.     unset LOGGER
  31. fi
  32. #
  33. # for diagnostics
  34. #
  35. if [ -t 1 -o -z "$LOGGER" ]; then
  36.     mesg () {
  37.     echo "$@"
  38.     }
  39. else
  40.     mesg () {
  41.     $LOGGER -t $(basename $0)"[$$]" "$@"
  42.     }
  43. fi
  44.  
  45. debug_mesg () {
  46.     test "$DEBUG" = "" -o "$DEBUG" = no && return
  47.     mesg "$@"
  48. }
  49.  
  50.  
  51. #
  52. # Not "modprobe --autoclean" ... one driver module can handle many
  53. # devices.  Unloading should be done when no devices are present.
  54. # Autocleaning happens if none of the devices are open, once any of
  55. # them gets opened; wrong timing.
  56. #
  57. MODPROBE="/sbin/modprobe -s -q"
  58. #MODPROBE="/sbin/modprobe -vs"
  59.  
  60.  
  61. ####################################################################
  62. #
  63. # usage: load_driver type filename description
  64. #
  65. # modprobes driver module(s) if appropriate, and optionally
  66. # invokes a driver-specific setup script (or user-mode driver).
  67. #
  68. # the "modules.*map" format file is guaranteed to exist
  69. #
  70. load_drivers ()
  71. {
  72.     local LOADED TYPE FILENAME DESCRIPTION LISTER
  73.     DRIVERS=""
  74.  
  75.     # make this routine more readable
  76.     TYPE=$1
  77.     FILENAME=$2
  78.     DESCRIPTION=$3
  79.  
  80.     # should we use usbmodules, pcimodules?  not on 2.5+, because sysfs
  81.     # ought to expose the data we need to find all candidate drivers.
  82.     # (on 2.5.48 it does for usb; but maybe not yet for pci.)
  83.     case "$KERNEL" in
  84.     2.2*|2.3*|2.4*)    LISTER=`which ${TYPE}modules` ;;
  85.     *)            LISTER="" ;;
  86.     esac
  87.  
  88.     if [ "$LISTER" != "" ]; then
  89.     # lister programs MIGHT be preferable to parsing from shell scripts:
  90.     # - usbmodules used for (a) multi-interface devices, (b) coldplug
  91.     # - pcimodules used only for coldplug
  92.     case $TYPE in
  93.     usb)
  94.         # "usbutils-0.8" (or later) is needed in $PATH
  95.         # only works if we have usbfs
  96.         # ... reads more descriptors than are passed in env
  97.         # ... doesn't handle comment syntax either
  98.         if [ "$DEVICE" = "" -o ! -f "$DEVICE" ]; then
  99.         LISTER=
  100.         else
  101.         DRIVERS=`$LISTER --mapfile $FILENAME --device $DEVICE`
  102.         fi ;;
  103.  
  104.     pci)
  105.         debug_mesg "pcimodules is scanning more than $PCI_SLOT ..."
  106.         DRIVERS=`$LISTER`
  107.         ;;
  108.     esac
  109.     fi
  110.  
  111.     # try parsing by shell scripts if no luck yet
  112.     if [ "$DRIVERS" = "" ]; then
  113.     ${TYPE}_map_modules < $FILENAME
  114.     fi
  115.  
  116.     # FIXME remove dups and blacklisted modules from $DRIVERS here
  117.  
  118.     if [ "$DRIVERS" = "" ]; then
  119.     return
  120.     fi
  121.  
  122.     # Note that DRIVERS aren't all going to be modules.
  123.     # For USB, some user-mode drivers or setup scripts may be listed.
  124.     debug_mesg Setup $DRIVERS for $DESCRIPTION
  125.  
  126.     # either kernel or user mode drivers may need to be set up
  127.     for MODULE in $DRIVERS
  128.     do
  129.     # maybe driver modules need loading
  130.         LOADED=false
  131.     if ! lsmod | grep -q "^$(echo $MODULE|sed -e 's/-/_/g') " > /dev/null 2>&1; then
  132.         if grep -q "^$(echo $MODULE|sed -e 's/[-_]/[-_]/g')\$" $HOTPLUG_DIR/blacklist \
  133.                 $HOTPLUG_DIR/blacklist.d/* \
  134.             >/dev/null 2>&1; then
  135.         debug_mesg "... blacklisted module:  $MODULE"
  136.         continue
  137.         fi
  138.  
  139.         # statically linked modules aren't shown by 'lsmod',
  140.         # and user mode drivers will ONLY have a setup script;
  141.         # it's not an error if a module doesn't exist or won't load.
  142.         if $MODPROBE -n $MODULE >/dev/null 2>&1 &&
  143.             ! $MODPROBE $MODULE >/dev/null 2>&1 ; then
  144.         mesg "... can't load module $MODULE"
  145.         else
  146.         # /etc/modules.conf may have set non-default module
  147.         # parameters ... handle per-device parameters in apps
  148.         # (ioctls etc) not in setup scripts or modules.conf
  149.         LOADED=true
  150.         fi
  151.     else
  152.         # This module is already loaded
  153.         LOADED=true
  154.     fi
  155.  
  156.     # always run setup scripts after any matching kernel code has had
  157.     # a chance to do its thing, no matter whether it was dynamically
  158.     # or statically linked, or if there is only a user mode driver.
  159.     # the script might re-enumerate usb devices after firmware download,
  160.     # giving kernel code another chance.
  161.     if [ -x $HOTPLUG_DIR/$TYPE/$MODULE ]; then
  162.         debug_mesg Module setup $MODULE for $DESCRIPTION
  163.         $HOTPLUG_DIR/$TYPE/$MODULE
  164.         LOADED=true
  165.     fi
  166.  
  167.     if [ "$LOADED" = "false" ]; then
  168.         mesg "missing kernel or user mode driver $MODULE "
  169.     fi
  170.     if echo "$MODULE" | grep -q "usb-storage" > /dev/null 2>&1 ; then
  171.         [ -x /usr/sbin/updfstab ] &&  /usr/sbin/updfstab
  172.     fi
  173.     done
  174. }
  175.  
  176. ####################################################################
  177. #
  178. # usage: log_to_stdout filename
  179. #
  180. # writes a copy of the current hotplug event to stdout.
  181. # add buffering, to avoid interleaving reports!
  182. #
  183. log_to_stdout ()
  184. {
  185.     if [ -x /bin/date ]; then
  186.     echo "HOTPLUG_TIME='$(/bin/date)'"
  187.     fi
  188.  
  189.     env | egrep -v '^PATH=|^PWD=|^_=|^OLDPWD=|^SHLVL=|^HOME='
  190.     echo ''
  191.     # empty line terminates events
  192. }
  193.  
  194. # vim:syntax=sh
  195.